from PIL import Image
from zipfile import ZipFile
import os
import shutil

# 设置要压缩的文件夹路径
source_folder = 'pic'
# 设置输出的压缩文件路径
output_zip = 'picOut'

# 创建ZipFile对象
with ZipFile(output_zip, 'w') as zf:
    # 遍历文件夹
    for root, dirs, files in os.walk(source_folder):
        for file in files:
            # 检查文件扩展名，仅处理图片文件
            if file.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.gif')):
                file_path = os.path.join(root, file)
                # 读取图片文件
                with Image.open(file_path) as img:
                    # 读取经纬度信息（如果存在）
                    exif_data = img.info.get('exif')
                    # 修改图片大小以减小体积
                    img_stream = img.stream()
                    img_stream.seek(0)
                    compressed_img = img_stream.read()
                    # 计算压缩后的图片大小
                    compressed_size = len(compressed_img)
                    # 如果图片体积大于4MB，进行压缩
                    if compressed_size > 4 * 1024 * 1024:
                        # 这里是一个简化的压缩方法，实际应用中可能需要更复杂的压缩算法
                        compressed_img = compressed_img[:-1024]
                        compressed_size = len(compressed_img)
                    # 添加图片到压缩文件
                    zf.writestr(file, compressed_img)
                    # 写入经纬度信息
                    if exif_data:
                        zf.writestr(f'{file}.exif', exif_data)

print('压缩完成')
